package com.situ.day38;

import com.situ.day6.Student;
import com.situ.day6.Teacher;
import org.junit.Test;

import java.util.ArrayList;
import java.util.List;

public class GenericDemo {

    @Test
    public void test1() {
        List list = new ArrayList();
        list.add("China");
        list.add(1);
        //集合使用取出元素：
        Object object = list.get(0);
        System.out.println(object);
        String str = (String) list.get(0);
    }

    //使用泛型
    @Test
    public void test2() {
        //声明泛型集合的时候指定元素的类型
        List<String> list = new ArrayList<>();
        list.add("Java");
        //泛型解决的是编译时期的报错，提前检查
        //list.add(1);
        String str = list.get(0);
        System.out.println(str);
    }

    @Test
    public void test3() {
        //两端的类型必须要一直
        List<String> list1 = new ArrayList<String>();
        //右侧的泛型可以不用写
        List<String> list2 = new ArrayList<>();
        //只写右侧泛型是不起作用
        List list3 = new ArrayList<String>();
        list3.add(1);

        // 两边不一致编译时候报错
        //List<Object> list5 = new ArrayList<String>();
        // 泛型类型必须为引用数据类型
        //List<int> list6 = new ArrayList<>();
        List<Integer> list6 = new ArrayList<>();
    }

    @Test
    public void test5() {
        List<String> list1 = new ArrayList<String>();
        List<Integer> list2 = new ArrayList<Integer>();
        Class c1 = list1.getClass();
        Class c2 = list2.getClass();
        System.out.println(c1 == c2);
        System.out.println(c1);
        System.out.println(c2);
    }


    //泛型擦除: 参数都是List list; 认为是同一个方法
    public void add1(List<Student> list) {
    }

    public void add(List<Teacher> list) {
    }

}
